package hxy.dragon.ktor.model


import kotlinx.serialization.Serializable
import org.jetbrains.exposed.v1.core.between
import org.jetbrains.exposed.v1.core.dao.id.EntityID
import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
import org.jetbrains.exposed.v1.dao.IntEntity
import org.jetbrains.exposed.v1.dao.IntEntityClass


/**
 * @description
 * @author HOX4SGH
 * @date 2024/7/13
 * 好像也就只有两个实体，一个参数，一个数据库表实体
 */

object Colleagues : IntIdTable("Colleagues") { // 表名会自动全部大写
	val name = varchar("name", length = 50)
	val age = integer("age").check { it.between(0, 120) }
	val telephone = varchar("telephone", length = 50).uniqueIndex()
//    val createDate = date("create_date").default(CurrentDateTimeValueFunction)
}

/**
 * 关系绑定，后面操作更加方便，不需要一一对应，这个也就是DAO层。
 * https://jetbrains.github.io/Exposed/deep-dive-into-dao.html
 *
 * 不能序列化到前端，所以没法用。javalin里面用jackson序列化的，可以用
 */
class Colleague(id: EntityID<Int>) : IntEntity(id) {
	companion object : IntEntityClass<Colleague>(Colleagues)

	var name by Colleagues.name
	var age by Colleagues.age
	var telephone by Colleagues.telephone

}

/**
 * 这个是对外的参数，可以返回给前端，能正常序列化
 */
@Serializable
data class ExposedColleagues(var id: Int? = null, val name: String, val age: Int, val telephone: String? = "")